package com.nineclock.system.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.nineclock.common.constant.NcConstant;
import com.nineclock.common.entity.UserInfo;
import com.nineclock.common.enums.ResponseEnum;
import com.nineclock.common.exception.NcException;
import com.nineclock.common.threadlocal.CurrentUserHolder;
import com.nineclock.common.utils.BeanHelper;
import com.nineclock.system.dto.SysCompanyContactConfigDTO;
import com.nineclock.system.mapper.SysCompanyContactConfigMapper;
import com.nineclock.system.pojo.SysCompanyContactConfig;
import com.nineclock.system.service.SysCompanyContactConfigService;
import lombok.extern.slf4j.Slf4j;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
@Slf4j
public class SysCompanyContactConfigServiceImpl implements SysCompanyContactConfigService {
    @Autowired
    SysCompanyContactConfigMapper sysCompanyContactConfigMapper;
    @Override
    public void addCompanyContactConfig(SysCompanyContactConfigDTO sysCompanyContactConfigDTO) {
        //健壮性判断
        if (sysCompanyContactConfigDTO == null || sysCompanyContactConfigDTO.getName() == null){
            throw new NcException(ResponseEnum.INVALID_PARAM_ERROR);
        }
        //丛线程获取企业id
        UserInfo userInfo = CurrentUserHolder.get();
        Long companyId = userInfo.getCompanyId(); //从线程获取企业id

        SysCompanyContactConfig sysCompanyContactConfig = BeanHelper.copyProperties(sysCompanyContactConfigDTO, SysCompanyContactConfig.class);
        sysCompanyContactConfig.setFieldType("String");
        sysCompanyContactConfig.setStatus((short)1);
        sysCompanyContactConfig.setCompanyId(companyId);

        sysCompanyContactConfigMapper.insert(sysCompanyContactConfig);
    }

    @Override
    public List<SysCompanyContactConfigDTO> queryCompanyContactConfig() {
//        ArrayList<SysCompanyContactConfig> sysCompanyContactConfigs = new ArrayList<>();
        //获取企业ID -- 从登陆用户信息中, 获取当前企业的ID
        UserInfo userInfo = CurrentUserHolder.get();
        Long companyId = userInfo.getCompanyId(); //从线程获取企业id

        //构造条件查询
        LambdaQueryWrapper<SysCompanyContactConfig> configWrapper = new LambdaQueryWrapper<>();
        configWrapper.eq(SysCompanyContactConfig::getCompanyId,companyId);
        Integer count = sysCompanyContactConfigMapper.selectCount(configWrapper);
        //如果初次使用,初始化默认字段
        if (count == 0){
            for (String s : NcConstant.COMPANY_CONFIG_CONTACT_LIST) {
                SysCompanyContactConfig sysCompanyContactConfig = new SysCompanyContactConfig();
                sysCompanyContactConfig.setName(s);
                sysCompanyContactConfig.setType("fixed");
                sysCompanyContactConfig.setCompanyId(companyId);
                sysCompanyContactConfig.setStatus((short)1);

                sysCompanyContactConfigMapper.insert(sysCompanyContactConfig);
            }
        }
        //查询返回
        List<SysCompanyContactConfig> sysCompanyContactConfigs1 = sysCompanyContactConfigMapper.selectList(configWrapper);
        //实体转换
        List<SysCompanyContactConfigDTO> sysCompanyContactConfigDTOS = BeanHelper.copyWithCollection(sysCompanyContactConfigs1, SysCompanyContactConfigDTO.class);
        return sysCompanyContactConfigDTOS;
    }

    @Override
    public void upupdateCompanyContactConfigStatus(Long id, short status) {
        /**
         * 思路：
         *  1. 先根据id查询该企业通讯录
         *  2. 如果不存在， 则抛出运行时异常
         *  3. 如果能查询到，根据id更新企业通讯录信息
         * @param id
         * @param status
         */

        SysCompanyContactConfig sysCompanyContactConfig = sysCompanyContactConfigMapper.selectById(id);
        if (sysCompanyContactConfig == null){
            throw new RuntimeException(ResponseEnum.DATA_NOT_EXISTS.getMessage());
        }
        sysCompanyContactConfig.setStatus(status);
        sysCompanyContactConfigMapper.updateById(sysCompanyContactConfig);

    }

    @Override
    public void deleteCompanyContactConfig(Long id) {
        //健壮性判断
        if (id == null){
            throw new RuntimeException(ResponseEnum.DELETE_OPERATION_FAIL.getMessage());
        }
        sysCompanyContactConfigMapper.deleteById(id);
    }
}
